package com.ruoyi.yljf.service.impl;

import java.util.LinkedList;
import java.util.List;

import cn.hutool.core.bean.BeanUtil;
import com.ruoyi.yljf.domain.dto.CommonTypeDTO;
import com.ruoyi.yljf.domain.vo.CommonVO;
import com.ruoyi.yljf.domain.vo.CommonResV2VO;
import com.ruoyi.yljf.domain.vo.DrugResVO;
import com.ruoyi.yljf.domain.vo.ResCommonVO;
import com.ruoyi.yljf.util.CommonUtils;
import org.bouncycastle.util.Arrays;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.yljf.mapper.JingfangMapper;
import com.ruoyi.yljf.domain.Jingfang;
import com.ruoyi.yljf.service.IJingfangService;

import javax.annotation.Resource;

/**
 * 经方Service业务层处理
 * 
 * @author metaee
 * @date 2025-03-17
 */
@Service
public class JingfangServiceImpl extends ServiceImpl<JingfangMapper, Jingfang> implements IJingfangService {
	@Resource
	private JingfangMapper jingfangMapper;

	@Resource
	private CommonUtils utils;

	/**
	 * 查询经方列表
	 *
	 * @param jingfang 经方
	 * @return 经方
	 */
	@Override
	public List<Jingfang> selectJingfangList(Jingfang jingfang) {
		LambdaQueryWrapper<Jingfang> queryWrapper = Wrappers.lambdaQuery();
		if (StringUtils.isNotEmpty(jingfang.getName())) {
			queryWrapper.like(Jingfang::getName, jingfang.getName());
		}
		if (StringUtils.isNotEmpty(jingfang.getAllocation())) {
			queryWrapper.eq(Jingfang::getAllocation, jingfang.getAllocation());
		}
		if (StringUtils.isNotEmpty(jingfang.getProvisions())) {
			queryWrapper.eq(Jingfang::getProvisions, jingfang.getProvisions());
		}
		if (StringUtils.isNotEmpty(jingfang.getYlprovisions())) {
			queryWrapper.eq(Jingfang::getYlprovisions, jingfang.getYlprovisions());
		}
		if (StringUtils.isNotEmpty(jingfang.getInterpretation())) {
			queryWrapper.eq(Jingfang::getInterpretation, jingfang.getInterpretation());
		}
		if (StringUtils.isNotEmpty(jingfang.getPathology())) {
			queryWrapper.eq(Jingfang::getPathology, jingfang.getPathology());
		}
		if (StringUtils.isNotNull(jingfang.getClassics())) {
			queryWrapper.eq(Jingfang::getClassics, jingfang.getClassics());
		}
		if (StringUtils.isNotNull(jingfang.getSupplement())) {
			queryWrapper.eq(Jingfang::getSupplement, jingfang.getSupplement());
		}
		if (StringUtils.isNotNull(jingfang.getPharmacopoeia())) {
			queryWrapper.eq(Jingfang::getPharmacopoeia, jingfang.getPharmacopoeia());
		}
		if (StringUtils.isNotNull(jingfang.getHuxinu())) {
			queryWrapper.eq(Jingfang::getHuxinu, jingfang.getHuxinu());
		}
		if (StringUtils.isNotNull(jingfang.getLiguanjie())) {
			queryWrapper.eq(Jingfang::getLiguanjie, jingfang.getLiguanjie());
		}
		if (StringUtils.isNotNull(jingfang.getOther())) {
			queryWrapper.eq(Jingfang::getOther, jingfang.getOther());
		}
		return jingfangMapper.selectList(queryWrapper);
	}

	@Override
	public ResCommonVO getJingfangVO(CommonTypeDTO dto) {
		List<Jingfang> jingfangs = jingfangMapper.selectList(
				new LambdaQueryWrapper<Jingfang>()
						.like(StringUtils.isNotEmpty(dto.getName()), Jingfang::getName, dto.getName())
						.or().in(condition(dto.getCategoryIds()), Jingfang::getClassics, dto.getCategoryIds())
						.or().in(condition(dto.getCategoryIds()), Jingfang::getSupplement, dto.getCategoryIds())
						.or().in(condition(dto.getCategoryIds()), Jingfang::getPharmacopoeia, dto.getCategoryIds())
						.or().in(condition(dto.getCategoryIds()), Jingfang::getHuxinu, dto.getCategoryIds())
						.or().in(condition(dto.getCategoryIds()), Jingfang::getLiguanjie, dto.getCategoryIds())
						.or().in(condition(dto.getCategoryIds()), Jingfang::getOther, dto.getCategoryIds())
		);
		List<CommonVO> commonVOS = BeanUtil.copyToList(jingfangs, CommonVO.class);
		return new ResCommonVO(jingfangs.size(), utils.Listsort(commonVOS));
	}

	@Override
	public CommonResV2VO getJingfangV2VO(CommonTypeDTO dto) {
		List<Jingfang> jingfangs = jingfangMapper.selectList(
				new LambdaQueryWrapper<Jingfang>()
						.like(StringUtils.isNotEmpty(dto.getName()), Jingfang::getName, dto.getName())
						.or().in(condition(dto.getCategoryIds()), Jingfang::getClassics, dto.getCategoryIds())
						.or().in(condition(dto.getCategoryIds()), Jingfang::getSupplement, dto.getCategoryIds())
						.or().in(condition(dto.getCategoryIds()), Jingfang::getPharmacopoeia, dto.getCategoryIds())
						.or().in(condition(dto.getCategoryIds()), Jingfang::getHuxinu, dto.getCategoryIds())
						.or().in(condition(dto.getCategoryIds()), Jingfang::getLiguanjie, dto.getCategoryIds())
						.or().in(condition(dto.getCategoryIds()), Jingfang::getOther, dto.getCategoryIds())
		);
		List<CommonVO> commonVOS = BeanUtil.copyToList(jingfangs, CommonVO.class);
		LinkedList<DrugResVO> drugResVOS = utils.ListsortV2(commonVOS);
		return new CommonResV2VO(drugResVOS.size(),drugResVOS);

	}

	private boolean condition(Long[] arr) {
		return !Arrays.isNullOrContainsNull(arr) && arr.length > 0;
	}

}
